﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TheStar.MODEL;

namespace TheStar.GUI
{
    public partial class PreencherEstimativaForm : Form
    {
        #region fields
        private readonly IEnumerable<Cidade> cidades;
        private event EventHandler<PreencherEstimativaFormEventArgs> estimativaPreenchida;
        #endregion

        #region constructors
        public PreencherEstimativaForm()
        {
            this.InitializeComponent();
        }
        public PreencherEstimativaForm(IEnumerable<Cidade> cidades)
            : this()
        {
            if (cidades == null)
            {
                throw new ArgumentNullException("cidades");
            }

            this.cidades = cidades;
            this.UpdateForm();
        }
        #endregion

        #region properties
        public event EventHandler<PreencherEstimativaFormEventArgs> EstimativaPreenchida
        {
            add { this.estimativaPreenchida += value; }
            remove { this.estimativaPreenchida -= value; }
        }
        #endregion

        #region methods
        private void UpdateForm()
        {
            #region preencher colunas
            DataTable table = new DataTable();
            foreach (Cidade cid in this.cidades)
            {
                table.Columns.Add(cid.Nome, typeof(double));
            }
            #endregion

            #region preenchimento da linha
            DataRow row = table.NewRow();
            for (int i = 0; i < table.Columns.Count; i++)
            {
                row[i] = 0D;
            }
            table.Rows.Add(row);
            #endregion

            this.dgvEstimativas.DataSource = table;
        }
        protected virtual void OnEstimativaPreenchida(object sender, PreencherEstimativaFormEventArgs e)
        {
            if (this.estimativaPreenchida != null)
            {
                this.estimativaPreenchida(sender, e);
            }
        }
        protected override void OnClosing(CancelEventArgs e)
        {
            // colocar os elementos preenchidos no gridview e os retorna a ao event
            IDictionary<Cidade, double> estimativas = new Dictionary<Cidade, double>();
            DataTable table = (DataTable)this.dgvEstimativas.DataSource;
            foreach (Cidade cid in this.cidades)
            {
                estimativas.Add(cid, (double)table.Rows[0][cid.Nome]);
            }
            this.OnEstimativaPreenchida(this, new PreencherEstimativaFormEventArgs(estimativas));

            base.OnClosing(e);
        }
        #endregion
    }
    public class PreencherEstimativaFormEventArgs : EventArgs
    {
        public PreencherEstimativaFormEventArgs(IDictionary<Cidade, double> estimativas)
        {
            this.Estimativas = estimativas;
        }

        public IDictionary<Cidade, double> Estimativas
        {
            get;
            private set;
        }
    }
}
